package com.common.function;

import com.alibaba.csp.sentinel.util.IdUtil;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;

/**
 * @author ben.huang
 */
public class FunctionTest {
    public static void main(String[] args) {
//        //数据打印
//        Consumer<String> consumer = System.out::println;
//        String str = "测试消息";
//        consumer.accept(str);
//        System.out.println("-------------------------------");
//        //数据校验
//        Consumer<String> existConsumer = e -> {
//            if(e.contains("string")){
//                System.out.println(e+ " 字符串含有 string");
//            }
//            else{
//                System.out.println(e+" 字符串不含有 stirng");
////                throw new RuntimeException("字符串不含有 string");
//            }
//        };
//        existConsumer.accept("Test string");
//        existConsumer.accept("Test String");
//        System.out.println("-------------------------------");
//
//        //supplier使用
//        Supplier<String> supplier = () -> "数据产生";
//        String s = supplier.get();
//        System.out.println("supplier 产生的数据是："+s);
//
//        Supplier<String> idSupplier = () ->
//            IdUtil.truncate("1");
//        String s1 = idSupplier.get();
//        System.out.println("idSupplier 产生的数据是："+s1);
//
//        System.out.println("-------------------------------");
//
//        //Function
//        Function<String,String> function = str1 -> " function 处理后的数据： " + str1;
//        Supplier<String> sup = () -> "sup 生产的消息";
//        String apply = function.apply(sup.get());
//        System.out.println(" function 接收了消息："+apply);

//        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
//        names.forEach(e-> System.out.println("Welcome login : "+e));
//        // 这里是使用的Consumer<String>,给一个参数执行相关操作
//
//        // 或者定义一个自定义Consumer
//        Consumer<String> logAction = name -> System.out.println("Logging action for: " + name);
//        names.forEach(logAction);


//        Supplier<Integer> randomIntSupplier = () -> ThreadLocalRandom.current().nextInt(1, 100);
//        System.out.println(randomIntSupplier.get()); // 输出一个1到100之间的随机整数


        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Double> doubles = numbers.stream().map((Function<Integer, Double>) Integer::doubleValue).collect(Collectors.toList());
        doubles.forEach(System.out::println);

        // 或者自定义Function
        Function<String, String> upperCaseTransformer = String::toUpperCase;
        String transformed = upperCaseTransformer.apply("hello"); // 输出 "HELLO"
        System.out.println(transformed);
    }
}
